#include <utility>
#include <string>
#include <iostream>

using namespace std;

int main(int argc, char const *argv[])
{
    /*****************************************************************************************************
     * pair 类模板
     * ---------------------------------------------------------------------------------------------------
     * 关联式容器存储的是键值对形式的数据，键值对
     * 
     *****************************************************************************************************/
    // -----------------------------------------------
    // --- 定义 ----
    // -----------------------------------------------
    // 默认定义
    pair<string, string> pa;
    // 使用初始值定义
    
    pair<string, string> pb("name", "charles");
    cout << "first:" << pb.first << " second:" << pb.second << endl;
    
     // 使用make_pair定义
    pair<string, int> pc = make_pair("age", 35);
    cout << "first:" << pb.first << " second:" << pb.second << endl;
    auto pd = make_pair(35.6, "rmb");
    cout << "first:" << pd.first << " second:" << pd.second << endl;

    // 定义好的pair可以对键，值做任意的修改，数据类型不可以改变
    pd.first = 100;
    pd.second = "usd";
    cout << "first:" << pd.first << " second:" << pd.second << endl;

    cout << endl;

    /*****************************************************************************************************
     * 成员函数
     * ---------------------------------------------------------------------------------------------------
     * pair.swap()        两个键值对互换  
     * 
     *****************************************************************************************************/
    
    // array.swap() 
    // -----------------------------------------------
    // 只有类型完全相同的两个pair才能互换
    auto pair_a = make_pair("name", "小芳");
    auto pair_b = make_pair("name", "欣欣");
    pair_a.swap(pair_b);
    cout << "first:" << pair_a.first << " second:" << pair_a.second << endl;

    return 0;
}
